"""
————————————————
原文作者：Python 技术论坛文档：《Python 3 标准库实例教程（）》
转自链接：https://learnku.com/docs/pymotw/cgitb-detailed-traceback-reports/3469
版权声明：翻译文档著作权归译者和 LearnKu 社区所有。转载请保留原文链接
"""
import cgitb

"""
运行后的错误报告会非常多。栈的每一帧都被列了出来：
    原文件的全部路径。
    栈中每个函数的参数值。
    错误路径中出错行的多行上下文。
    引起此错误的变量的值。

能访问到涉及此错误栈的变量可以帮助我们定位并不是因为此行发生错误的情况。
"""
cgitb.enable(format='text')


def func2(a, divisor):
    return a / divisor


def func1(a, b):
    c = b - 5
    return func2(a, c)


def cgitb_exception_properties():
    func1(1, 5)


def cgitb_log_exception():
    """
    大多数场景中，打印出标准错误的追踪详情是很好的解决方式。不过在生产系统中，把它记录下来更加棒一些。
    enable() 函数有一个 logdir 参数，可以指定错误的记录目录。
    指定了目录后，每条异常都会被记录到给定的目录中。
    """
    import os

    LOGDIR = os.path.join(os.path.dirname(__file__), 'LOGS')

    if not os.path.exists(LOGDIR):
        os.makedirs(LOGDIR)

    cgitb.enable(
        logdir=LOGDIR,
        display=False,
        format='text',
    )

    def func(a, divisor):
        return a / divisor

    func(1, 0)


if __name__ == '__main__':
    # cgitb_exception_properties()
    cgitb_log_exception()
